In many software applications, data is arranged along a series of dimensions. For example in a business application, data can be arranged along such dimensions as management organization, business line, geography, fiscal reporting period, etc. When users of an application create and manipulate data, the data is associated with combinations of values for the relevant dimensions. This introduces the potential for extremely large numbers of combinations, especially if there are a large number of dimensions and/or values along each dimension.
Given the large sets of constraints a company may have in place, calculating which dimensional combinations are valid can be a very expensive operation. For example, if there are two sets of constraints (e.g., a set of valid management organization/process mappings and a set of valid process/risk mappings) the most straight-forward approach would consist of examining every pair of mappings in two constraints and computing which management organizations, processes, and risks are applicable. Such an approach, however, can quickly lead to significant increases in the time and computational resources required to complete the reduction in the input space, as the number of dimensions involved and the size of the different mappings among dimensions increases.
As another example, where there are numerous dimensions and/or values along each dimension, it generally is true that not every possible combination is meaningful. Approaches, such as the naïve algorithm, are inefficient when searching for the intersection of two points. For example, if a process map constraint set contained approximately 100,000 mappings and an example risk map constraint set included 700 mappings, around 70 million combinations would have to be examined. If there were six potentially relevant dimensions for the two constraint sets, the number of low level tree node comparisons would be about 420 million node comparisons. A simple loop that computes a check or mathematical calculation 420 million times would take on the order of ten seconds to execute.